Skip to content

feat: refactor illustrations package#675

Merged
adrienzheng-cb merged 2 commits into
masterfrom
adrien/refactor-illustrations
May 13, 2026
Merged

feat: refactor illustrations package#675
adrienzheng-cb merged 2 commits into
masterfrom
adrien/refactor-illustrations

Conversation

@adrienzheng-cb
Copy link
Copy Markdown
Contributor

@adrienzheng-cb adrienzheng-cb commented May 12, 2026

What changed? Why?

1. Migrate — Moves existing CJS wrapper files from the old flat layout to the new nested layout, updating the manifest paths:

  • svgJs/light/svgJs/cjs/light/
  • svgJs/dark/svgJs/cjs/dark/
  • svgJs/themeable/svgJs/cjs/themeable/

2. Backfill — For any illustration that has a raw svg/themeable/*.svg on disk but is missing its JS wrappers, it reads the SVG content and writes the missing files:

  • CJS wrapper → svgJs/cjs/themeable/<name>-<version>.js (module.exports = { content: \...` }`)
  • ESM wrapper → svgJs/esm/themeable/<name>-<version>.js (export default \...``)

After writing the wrappers (or if they already existed), it deletes the raw .svg file and removes svgThemed from the manifest — since the SVG content is now embedded in the JS wrappers and the raw file is no longer needed.

3. Regenerate maps — For every illustration type that had any changes, it regenerates:

  • svgJsMap.ts — maps each illustration name to { light, dark, themeable? } lazy CJS loaders
  • svgEsmMap.ts — maps each illustration name to { themeable } lazy ESM dynamic imports (only for items that have a themeable variant)

4. Remove — Removed files in svg/themeable/

Root cause (required for bugfixes)

UI changes

iOS Old iOS New
old screenshot new screenshot
Android Old Android New
old screenshot new screenshot
Web Old Web New
old screenshot new screenshot

Testing

How has it been tested?

  • Unit tests
  • Interaction tests
  • Pseudo State tests
  • Manual - Web
  • Manual - Android (Emulator / Device)
  • Manual - iOS (Emulator / Device)

Testing instructions

Illustrations/Icons Checklist

Required if this PR changes files under packages/illustrations/** or packages/icons/**

  • verified visreg changes with Terran (include link to visreg run/approval)
  • all illustration/icons names have been reviewed by Dom and/or Terran

Change management

type=routine
risk=low
impact=sev5

automerge=false

@cb-heimdall
Copy link
Copy Markdown
Collaborator

cb-heimdall commented May 12, 2026

✅ Heimdall Review Status

Requirement Status More Info
Reviews 1/1
Denominator calculation
Show calculation
1 if user is bot 0
1 if user is external 0
2 if repo is sensitive 0
From .codeflow.yml 1
Additional review requirements
Show calculation
Max 0
0
From CODEOWNERS 1
Global minimum 0
Max 1
1
1 if commit is unverified 0
Sum 1
CODEOWNERS ✅ See below

CODEOWNERS

Code Owner Status Calculation
ui-systems-eng-team 1/1
Denominator calculation
Additional CODEOWNERS Requirement
Show calculation
Sum 0
0
From CODEOWNERS 1
Sum 1

@adrienzheng-cb adrienzheng-cb force-pushed the adrien/refactor-illustrations branch from b0f36ff to 92e2b0f Compare May 12, 2026 20:45
@github-actions github-actions Bot added the root label May 12, 2026
Copy link
Copy Markdown
Contributor

@cb-ekuersch cb-ekuersch left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good but there are only two asset types that were updated, is that expected?

Image

@adrienzheng-cb adrienzheng-cb merged commit 595cd93 into master May 13, 2026
34 of 37 checks passed
@adrienzheng-cb adrienzheng-cb deleted the adrien/refactor-illustrations branch May 13, 2026 15:15
adrienzheng-cb added a commit that referenced this pull request May 15, 2026
* feat: refactor illustrations package (#675)

* feat: refactor illustrations package

* Update changelog

* feat: support more props on TextInputBaseProps (#679)

* feat: support more props on TextInputBaseProps

* Fix tabs spreading order

* Bump version

* Add tests

* Move readOnly prop location

* Fix formatting

* fix test

* chore: set codeflow arch (#680)

* feat: add illustration theming via applyTheme prop (#672)

* feat: add illustration theming via applyTheme prop

* update changelog

* fix: add width/height="100%" to themed ESM SVG files (#683)

* fix(illustrations): add width/height="100%" to themed ESM SVG files

Ensures themed illustrations render at the correct size when inlined
into the DOM. SVGs without explicit dimensions default to 300×150px in
some browsers; setting 100% lets the wrapping container control sizing
via its viewBox.

* update changelog

* fix: adjust tabs default tab label padding (#682)

* fix: adjust tabs default tab label padding

* Bump version

* fix: unreliable version check (#684)

* fix: unreliable version check.

* update changelogs

* chore: add helpful comments to deployable apps in our codeflow config file (#687)

* fix(illustrations): prevent flickering when illustration palette changes on web (#685)

* fix(illustrations): prevent flickering when illustration palette changes on web
Remove illustrationColor from the useEffect dependency array in
createIllustration. The SVG source file is the same regardless of the
active palette — ThemeProvider handles palette changes via CSS variable
updates, so there is no reason to re-fetch the SVG. Previously, any
palette change (including spurious reference changes from ThemeProvider
re-renders) would clear the SVG and trigger a reload, causing a visible
flicker.
Also only clear svgMarkup on load failure (not at effect start), so
when the illustration name changes the previous SVG stays visible until
the new one is ready rather than flashing to nothing.

* update changelog

* dedupe

* update changelog

---------

Co-authored-by: Hunter Copp <huntercolecopp@gmail.com>
Co-authored-by: Erich <137924413+cb-ekuersch@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Development

Successfully merging this pull request may close these issues.

3 participants